package com.zyf.chapter02.behavior.strategy.sort.file;

import java.io.File;

/**
 * 第一个版本
 * 实现对一个文件进行排序的功能。文件只包含整形数，并且相邻的数字通过逗号来区隔。
 * 文件容量最大有 1TB
 * @author yifeng
 */
public class Sorter {
    private static final long GB = 1000 * 1000 * 1000;

    public void sortFile(String filePath) {
        // 省略校验逻辑
        File file = new File(filePath);
        long fileSize = file.length();
        // 将文件大小划分为 4 个区间，根据区间分别使用不同的算法
        if (fileSize < 6 * GB) { // [0, 6GB]
            quickSort(filePath);
        } else if (fileSize < 10 * GB) { // [6GB, 10GB]
            externalSort(filePath);
        } else if (fileSize < 100 * GB) { // [10GB, 100GB]
            concurrentExternalSort(filePath);
        } else { // [100GB, ~]
            mapreduceSort(filePath);
        }
    }

    private void quickSort(String filePath) {
        // 快速排序
    }

    private void externalSort(String filePath) {
        // 外部排序
    }

    private void concurrentExternalSort(String filePath) {
        // 多线程外部排序
    }

    private void mapreduceSort(String filePath) {
        // 利用 MapReduce 多机排序
    }
    // 使用案例
    public static void main(String[] args) {
        Sorter sorter = new Sorter();
        sorter.sortFile(args[0]);
    }
}
